Application or process virtualization software can decouple applications, which can each include one or more running processes at runtime, from an underlying operating system. Thus, application virtualization can typically allow applications to be run without the need to visit a particular physical machine where the application or is installed. For example, a virtual application package that includes the application and the application's own set of virtual environment configurations may be provided on-demand over a network or on a removable storage device.
A virtual environment isolates one or more virtual applications or processes in the environment from applications or processes outside the environment (e.g., the underlying operating system and/or one or more other applications or processes running on the operating system outside the virtual environment). A virtual environment also facilitates access by the one or more applications or processes within the virtual environment to resources outside the virtual environment, such as resources managed by the underlying operating system. Thus, application or process virtualization typically includes two aspects: isolation and resource management. Isolation typically includes keeping a namespace within the virtual environment separate from one or more namespaces outside the virtual environment. Resource management typically includes managing resources in a way that allows processes in the virtual environment to run properly despite the isolation, and the resources are typically managed in such a way that processes in the virtual environment are unaware of the virtualization.
Because of the isolation aspect of virtualization, a virtual environment can provide a layer of indirection between the underlying operating system and a virtual process in the virtual environment. Once a virtual process is running in the virtual environment, communications can be translated between the virtual and non-virtual environments, as is done with existing application virtualization software.
It can be difficult for a running non-virtual process to create a new virtual process in a natural way because there is not yet a translation or indirection scheme set up for the new virtual process. Some application virtualization software has dealt with this type of virtual process creation by having a surrogate intercept new process creation application programming interface (API) calls that have been sent from initiating non-virtual processes. If available virtual processes can fulfill the process creation calls, the surrogate can be used to invoke procedures to create the corresponding virtual processes in appropriate virtual environments.